#ifndef SORT_H
#define SORT_H 1

#include <iostream>

#include "ADDObjetBase.h"

using namespace std;

/**
 * Gestion des sorts de mage. Un sort est décrit par :
 * -# son école,
 * -# son niveau,
 * -# un numéro (dans l'ordre alphabétique).
 *
 * @author Johan "Solo" Luisier
 */
class Sort : public ADDObjetBase
{
 public:
  Sort( const unsigned& ecole = 0, const unsigned& niveau = 1,
	const unsigned& numero = 0 );
  Sort( const Sort& m_sort );
  ~Sort();
  const Sort& operator=( const Sort& m_sort );
  bool operator<( const Sort& m_sort ) const;
  bool operator>( const Sort& m_sort ) const;
  bool operator==( const Sort& m_sort ) const;
  unsigned ecole() const;
  unsigned niveau() const;
  unsigned numero() const;
  /** Permet d'effectuer un affichage simple d'un sort.
   * On met sur une ligne l'école (que l'on aligne sur 2 caractères), le
   * niveau et le numéro (lui aussi aligné sur 2 caractères).
   *
   * @param out le flot de sortie désiré (cout, info(), un fichier, ...)
   * @param m_sort le sort à afficher
   * @return le flot de sortie modifié
   */
  friend ostream& operator<<(ostream& out, const Sort& m_sort);
 protected:
  /*
   * Ecole, niveau et numéro du sort.
   */
  unsigned
    Ecole,  /**< Numéro de l'école de magie (entre 1 et 21) */
    Niveau, /**< Niveau du sort */
    Numero; /**< Numéro du sort, qui est attribué par ordre alphabétique */
};

static const Sort SortInconnu;

#endif // SORT_H
